docs(guide): state the html tier's tag spelling on react-pages, scope the react tier's - #7939
Merged
baozhoutao merged 1 commit intoSep 6, 2026
Conversation
…ier's `content/docs/guide/react-pages.md` covers both source-authoring tiers but stated only the react tier's PascalCase rule, so a `kind:'html'` author copied a spelling the parser rejects at save time with nothing on the page naming the rule they broke. Two prose edits, modelled on the same fix upstream: - the `kind:'html'` section now says how whitelist entries are spelled — the registered type names written verbatim, namespace prefix and underscores included, with a prefixed and a snake_case example, and an explicit note that neither a PascalCase borrow nor a re-spelled `record:related-list` is registered; - the react-tier naming passages (the scope table row and the tag-derivation paragraph) are now scoped with "on this tier", and the derivation points at what an html page writes instead. The whitelist is `new Set(Object.keys(manifest.components))` compared by exact `Set.has` with no case folding, so this documents the rule as it already is; no parser, manifest or authorable-surface change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013uAaxiwgYDybsTNV9xwa1M
baozhoutao
marked this pull request as ready for review
September 6, 2026 03:47
This was referenced Sep 6, 2026
baozhoutao
deleted the
claude/issue-7006-react-pages-html-tier-tag-spelling
branch
September 6, 2026 04:05
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #7006
content/docs/guide/react-pages.mdis the home for both source-authoring tiers, but the only tag-naming rule it stated was the react tier's PascalCase one. Akind:'html'author who followed the stated rule was rejected at save time, with nothing on the page naming the rule they broke — while the page's own html examples already demonstrated the correct spelling.Prose only. No parser, manifest or authorable-surface change: the rule already is what this page now says, the page was simply silent about it. Modelled on the same fix upstream (objectstack-ai/objectstack#13734), which repairs this defect on
content/docs/ui/react-pages.mdx.(Tag names below are written without their angle brackets — the platform's body sanitizer eats short angle-bracket fragments.)
The rule, re-measured (not taken from the card)
Re-read on the objectstack checkout at
a4816a7:packages/sdui-parser/src/index.ts:41—const allowedTags = new Set(Object.keys(manifest.components));packages/sdui-parser/src/parse.ts:95—if (this.opts.allowedTags && !this.opts.allowedTags.has(tag)) {, erroris not an allowed componentAn exact
Set.hasagainst the manifest's own keys.grep -nE 'toLowerCase|toUpperCase|localeCompare'overpackages/sdui-parser/src/hits onlycodegen.ts(which derives the react tier's PascalCase names) — nothing on the whitelist path. The card's premise holds.Registry figures re-measured independently in this repo, from
packages/core/src/registry/public-blocks.ts: 57 entries, 28 carrying a namespace prefix, 4 snake_case after the colon (record:related_list,record:line_items,record:quick_actions,record:reference_rail) — matching the card's numbers exactly.Edit 1 — the
kind:'html'section now states the spellingUnchanged sentence above it: "Only tags in the public block manifest are allowed, props are validated against each block's declared inputs, and unknown tags are a hard error at save time."
Added after it:
The wording deliberately says "the registered type name, verbatim" and never "kebab-case". "kebab-case" would send an author to
record:related-list, which is not registered either — so the paragraph names that wrong spelling explicitly and rules it out. The upstream model PR does use the phrase "lowercase and kebab-case"; that half of its wording is not copied here.Edit 2 — the react-tier naming passages are scoped
Before (scope table row):
After:
Before (tag derivation):
After:
The section names
kind:'html'at seven places; only the section itself gained the rule.Reverse verification — anchor counts (
grep -c, on the page)registered type names, written verbatimOn this tieron this tier(case-insensitive, both edits)record:related-list(the wrong spelling, named as wrong)kebab-case— control, the trap wordingPascalCaseGates (redirect-then-capture; each gate's own verdict line)
Run at
7686d3c80, worktree baseb8e3f8379.node scripts/check-doc-fence-languages.mjscheck:doc-fences — every TypeScript block in 227 document(s) is fenced ts/tsx/typescript…node scripts/check-doc-component-types.mjsEvery documented component type is registered.node scripts/check-doc-snippet-types.mjsSemantic phase: 467 of 467 block(s) judged, 0 failed./Every covered documentation snippet compiles against the built types.node scripts/check-doc-links.mjsLinks are valid across 17 scan roots.node scripts/check-control-bytes.mjscheck-control-bytes: OK (scanned 6407 tracked text file(s); skipped 85 binary).node scripts/check-changeset-presence.mjsNo source or published contract of a released package changed in this range, so no changeset is owed.node scripts/check-governed-queue-guard.mjs --test content/docs/guide/react-pages.mdNOT GOVERNED — 1 path(s) checked against 5 governed surface(s); none matched.check:doc-snippetswas run for real, not narrowed: its--build-filterclosure (34 tasks) was built first under the shared verify lock, so its exit 0 is a verdict about documents rather than an exit 2 "could not run".Extra control-byte sweep beyond the gate:
grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'over the edited file — no hits.Files changed
content/docs/guide/react-pages.md— 1 file, +18 / −5. No changeset (the gate above says none is owed: a docs page undercontent/docsreleases nothing).Generated by Claude Code